CSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ãã³ã³ããã®ã¹ã¿ã€ãªã³ã°ã«åºã¥ããŠã³ã³ããŒãã³ããé©å¿ããã匷åãªã¬ã¹ãã³ã·ããã¶ã€ã³ææ³ã§ãã倿§ãªã°ããŒãã«ãµã€ãã§ã®å®è·µçãªå¿çšãåŠã³ãŸãããã
CSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã®ã¹ã¿ã€ã«ããŒã¹ã®ã¬ã¹ãã³ã·ããã¶ã€ã³
åŸæ¥ã®ã¬ã¹ãã³ã·ããã¶ã€ã³ã¯ããã¥ãŒããŒãã®ãµã€ãºã«åºã¥ããŠãŠã§ããµã€ãã®ã¬ã€ã¢ãŠããã¹ã¿ã€ã«ãé©å¿ãããã¡ãã£ã¢ã¯ãšãªã«å€§ããäŸåããŠããŸãããã®ã¢ãããŒãã¯å¹æçã§ãããåããã¥ãŒããŒãå ã§ç°ãªãã³ã³ããã¹ãã«é©å¿ããå¿ èŠãããè€éãªã³ã³ããŒãã³ããæ±ãéã«ãäžæŽåãå°é£ãçããããšããããŸããCSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ããã詳现ã§çŽæçãªè§£æ±ºçãæäŸããèŠçŽ ããã®ã³ã³ããèŠçŽ ã«é©çšãããã¹ã¿ã€ãªã³ã°ã«å¿çã§ããããã«ããããšã§ãçã«ã³ã³ããŒãã³ãããŒã¹ã®ã¬ã¹ãã³ã·ããªæ¯ãèããå¯èœã«ããŸãã
CSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªãšã¯ïŒ
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ãã³ã³ããã¯ãšãªã®åãåçŽãªãµã€ãºããŒã¹ã®æ¡ä»¶ãè¶ ããŠæ¡åŒµããŸããã³ã³ããã®å¹ ãé«ãããã§ãã¯ãã代ããã«ããã®ã³ã³ããã«é©çšãããŠããç¹å®ã®CSSããããã£ãšå€ã®ååšããã§ãã¯ããããšãã§ããŸããããã«ãããã³ã³ããŒãã³ãã¯åã«ãã®å¯žæ³ã ãã§ãªããã³ã³ããã®ã³ã³ããã¹ãã«åºã¥ããŠã¹ã¿ã€ãªã³ã°ãé©å¿ãããããšãå¯èœã«ãªããŸãã
ãã®ããã«èããŠã¿ãŠãã ããïŒããã¥ãŒããŒãã®å¹
ã¯768pxããåºããïŒããšå°ãã代ããã«ãããã®ã³ã³ããã«ã¯--theme: dark;
ã«ã¹ã¿ã ããããã£ãèšå®ãããŠãããïŒããšå°ããããšãã§ããŸããããã«ããããŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³å
šäœã§ç°ãªãããŒããã¬ã€ã¢ãŠãããŸãã¯ãã©ã³ãã£ã³ã°ã®ããªãšãŒã·ã§ã³ã«ã·ãŒã ã¬ã¹ã«é©å¿ã§ãããæè»ã§åå©çšå¯èœãªã³ã³ããŒãã³ããäœæããããã®å
šãæ°ããå¯èœæ§ãéãããŸãã
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã®å©ç¹
- ã³ã³ããŒãã³ãããŒã¹ã®ã¬ã¹ãã³ã·ãæ§ïŒ åã ã®ã³ã³ããŒãã³ãå ã§ã¬ã¹ãã³ã·ãæ§ãå®çµãããç§»æ€æ§ãšåå©çšæ§ãé«ããŸãã
- CSSã®è€éãã軜æžïŒ ç¹å®ã®ç»é¢ãµã€ãºãã¿ãŒã²ããã«ããé床ã«å ·äœçãªã¡ãã£ã¢ã¯ãšãªãåé¿ããŸãã
- ã¡ã³ããã³ã¹æ§ã®åäžïŒ ã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°ãžã®å€æŽãããŠã§ããµã€ãã®ä»ã®éšåã«åœ±é¿ãäžããå¯èœæ§ãäœããªããŸãã
- ããŒããšããªãšãŒã·ã§ã³ïŒ ã³ã³ããã®ã¹ã¿ã€ãªã³ã°ã«åºã¥ããŠãã³ã³ããŒãã³ãã®ç°ãªãããŒããããªãšãŒã·ã§ã³ãç°¡åã«äœæã§ããŸããããã¯ç¹ã«ãæ§ã ãªå°åã§ç°ãªããã©ã³ãã£ã³ã°ã¬ã€ãã©ã€ã³ãé©çšããå¿ èŠãããåœéçãªãã©ã³ãã«ãšã£ãŠæçšã§ãã
- ã¢ã¯ã»ã·ããªãã£ã®åäžïŒ ã³ã³ããã®ã³ã³ããã¹ãã«åºã¥ããŠã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãé©å¿ãããããšã§ãé害ãæã€ãŠãŒã¶ãŒã«ããé©åãªèŠèŠçãªæããããæäŸããã¢ã¯ã»ã·ããªãã£ãåäžãããããšãã§ããŸãã
- åçãªã³ã³ãã³ãé©å¿ïŒ ã³ã³ããŒãã³ãã¯ãå«ãŸããã³ã³ãã³ãã®çš®é¡ã«åºã¥ããŠã¬ã€ã¢ãŠãã衚瀺ã調æŽã§ããŸããç»åãå«ãŸããŠãããã©ããã«åºã¥ããŠé©å¿ãããã¥ãŒã¹èšäºã®èŠçŽãæ³åããŠã¿ãŠãã ããã
CSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã®äœ¿ç𿹿³
以äžã«ãã³ã³ããã¹ã¿ã€ã«ã¯ãšãªãå®è£ ããæ¹æ³ã解説ããŸãã
1. ã³ã³ããã®èšå®
ãŸããèŠçŽ ãã³ã³ãããšããŠæå®ããå¿
èŠããããŸããããã¯container-type
ããããã£ã䜿çšããŠè¡ããŸãã
.container {
container-type: inline-size;
}
inline-size
å€ã¯æãäžè¬çã§äŸ¿å©ã§ãã³ã³ããããã®ã€ã³ã©ã€ã³ïŒæ°Žå¹³ïŒãµã€ãºãã¯ãšãªã§ããããã«ãªããŸããã€ã³ã©ã€ã³ãšãããã¯ã®äž¡æ¹ã®ãµã€ãºãã¯ãšãªããsize
ã䜿çšã§ããŸããæ³šæããªããšãsize
ã®ã¿ã䜿çšãããšããã©ãŒãã³ã¹ã«åœ±é¿ãåºãå¯èœæ§ããããŸãã
ãããã¯ããµã€ãºã¯ãšãªã§ã¯ãªãã¹ã¿ã€ã«ã¯ãšãªå°çšã®ã³ã³ãããšããŠäœ¿çšããã«ã¯container-type: style
ããäž¡æ¹ã䜿çšããã«ã¯container-type: size style
ã䜿çšããŸããã³ã³ããåãå¶åŸ¡ããã«ã¯container-name: my-container
ã䜿çšãã@container my-container (...)
ã§ã¿ãŒã²ããã«ããŸãã
2. ã¹ã¿ã€ã«ã¯ãšãªã®å®çŸ©
次ã«ã@container style()
ã¢ããã«ãŒã«ã䜿çšããŠãç¹å®ã®æ¡ä»¶ãæºãããããšãã«é©çšãããã¹ã¿ã€ã«ãå®çŸ©ã§ããŸãã
@container style(--theme: dark) {
.component {
background-color: #333;
color: #fff;
}
}
ãã®äŸã§ã¯ã@container
ã«ãŒã«å
ã®ã¹ã¿ã€ã«ã¯ããã®ã³ã³ããèŠçŽ ã«--theme
ã«ã¹ã¿ã ããããã£ãdark
ã«èšå®ãããŠããå Žåã«ã®ã¿ã.component
èŠçŽ ã«é©çšãããŸãã
3. ã³ã³ãããžã®ã¹ã¿ã€ã«ã®é©çš
æåŸã«ãã¹ã¿ã€ã«ã¯ãšãªããã§ãã¯ããŠããCSSããããã£ãã³ã³ããèŠçŽ ã«é©çšããå¿ èŠããããŸãã
<div class="container" style="--theme: dark;">
<div class="component">This is a component. </div>
</div>
ãã®äŸã§ã¯ã.component
ã¯æãèæ¯ãšçœãããã¹ãã«ãªããŸãããªããªãããã®ã³ã³ãããïŒç°¡æœãã®ããã«ïŒHTMLã«çŽæ¥--theme: dark;
ã¹ã¿ã€ã«ãé©çšããŠããããã§ãããã¹ããã©ã¯ãã£ã¹ã¯ãCSSã¯ã©ã¹ãä»ããŠã¹ã¿ã€ã«ãé©çšããããšã§ããJavaScriptã䜿çšããŠã³ã³ããã®ã¹ã¿ã€ã«ãåçã«å€æŽããã¹ã¿ã€ã«ã¯ãšãªã®æŽæ°ãããªã¬ãŒããããšãã§ããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®å®çšäŸ
1. ããŒãä»ãã³ã³ããŒãã³ã
è€æ°ã®ããŒãããµããŒããããŠã§ããµã€ããæ³åããŠã¿ãŠãã ãããã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã䜿çšããŠãã¢ã¯ãã£ããªããŒãã«åºã¥ããŠã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°ãèªåçã«èª¿æŽã§ããŸãã
/* CSS */
.app-container {
--theme: light;
}
@container style(--theme: dark) {
.card {
background-color: #333;
color: #fff;
}
}
@container style(--theme: light) {
.card {
background-color: #f0f0f0;
color: #333;
}
}
/* HTML */
<div class="app-container" style="--theme: dark;">
<div class="card">
<h2>Card Title</h2>
<p>Card content.</p>
</div>
</div>
ãã®äŸã§ã¯ã.card
ã³ã³ããŒãã³ãã¯ããã®ã³ã³ããã®--theme
ããããã£ã«åºã¥ããŠãããŒã¯ããŒããšã©ã€ãããŒããèªåçã«åãæ¿ããŸããããã¯ããŠãŒã¶ãŒã奜ã¿ã«å¿ããŠç°ãªãããŒããéžæã§ãããµã€ãã«ãšã£ãŠéåžžã«æçã§ãã
2. ã¬ã€ã¢ãŠãã®ããªãšãŒã·ã§ã³
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã䜿çšããŠãå©çšå¯èœãªã¹ããŒã¹ãããŒãžã®å šäœçãªã¬ã€ã¢ãŠãã«åºã¥ããŠãã³ã³ããŒãã³ãã®ç°ãªãã¬ã€ã¢ãŠãããªãšãŒã·ã§ã³ãäœæã§ããŸããèšèªéžæã³ã³ããŒãã³ããèããŠã¿ãŸããããã¡ã€ã³ããã²ãŒã·ã§ã³ã§ã¯ã³ã³ãã¯ããªããããããŠã³ãããããŸããããããã¿ãŒå ã§ã¯å©çšå¯èœãªèšèªã®å®å šãªãªã¹ãã«ãªããããããŸããã
/* CSS */
.navigation {
--layout: compact;
}
.footer {
--layout: expanded;
}
@container style(--layout: compact) {
.language-selector {
/* Styles for compact dropdown */
}
}
@container style(--layout: expanded) {
.language-selector {
/* Styles for full list of languages */
}
}
/* HTML */
<nav class="navigation" style="--layout: compact;">
<div class="language-selector">...
<footer class="footer" style="--layout: expanded;">
<div class="language-selector">...
ãã®ã¢ãããŒãã¯ãç°ãªãããã€ã¹ããã©ãããã©ãŒã éã§å€æ§ãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«å¯Ÿå¿ãããŠã§ããµã€ãã«ãšã£ãŠäŸ¡å€ããããŸããã¢ãã€ã«ãµã€ããšãã¹ã¯ããããµã€ãã®æ§é ã¯ãã°ãã°å€§ããç°ãªãããšãèæ ®ãããšãããã¯ã³ã³ããŒãã³ãã®é©å¿ã«åœ¹ç«ã¡ãŸãã
3. ã³ã³ãã³ãã¿ã€ããžã®é©å¿
èšäºã®èŠçŽããããã¥ãŒã¹ãµã€ããèããŠã¿ãŸããããã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã䜿çšããŠãç»åãå«ãŸããŠãããã©ããã«åºã¥ããŠèŠçŽã®è¡šç€ºã調æŽã§ããŸãã
/* CSS */
.article-summary {
--has-image: false;
}
@container style(--has-image: true) {
.article-summary {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 1rem;
}
}
/* HTML (with image) */
<div class="article-summary" style="--has-image: true;">
<img src="..." alt="..." />
<div>...
</div>
/* HTML (without image) */
<div class="article-summary" style="--has-image: false;">
<div>...
</div>
ããã«ãããèšäºã®èŠçŽãããèŠèŠçã«é
åçã§æ
å ±éã®å€ã衚瀺ã«ãªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸããHTMLã§çŽæ¥--has-image
ããããã£ãèšå®ããã®ã¯çæ³çã§ã¯ãªãããšã«æ³šæããŠãã ãããããè¯ãã¢ãããŒãã¯ãJavaScriptã䜿çšããŠç»åã®ååšãæ€åºãã.article-summary
èŠçŽ ã«ã¯ã©ã¹ïŒäŸïŒ.has-image
ïŒãåçã«è¿œå ãŸãã¯åé€ãããã®åŸ.has-image
ã¯ã©ã¹ã®CSSã«ãŒã«å
ã§--has-image
ã«ã¹ã¿ã ããããã£ãèšå®ããããšã§ãã
4. ããŒã«ã©ã€ãºãããã¹ã¿ã€ãªã³ã°
åœéçãªãŠã§ããµã€ãã§ã¯ãã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã䜿çšããŠãèšèªãå°åã«åºã¥ããŠã¹ã¿ã€ã«ãé©å¿ãããããšãã§ããŸããããšãã°ãããã¹ããé·ãèšèªã«ã¯ç°ãªããã©ã³ããµã€ãºãã¹ããŒã·ã³ã°ã䜿çšãããå ŽåããããŸãã
/* CSS */
.locale-container {
--language: en;
}
@container style(--language: ja) {
.text {
font-size: 1.1em;
letter-spacing: 0.05em;
}
}
@container style(--language: ar) {
.text {
direction: rtl;
}
}
/* HTML */
<div class="locale-container" style="--language: ja;">
<p class="text">...</p>
</div>
ããã«ãããç°ãªãèšèªã®ãªãŒãã£ãšã³ã¹ã«å¯ŸããŠãããã«ã¹ã¿ãã€ãºããããŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãåµåºã§ããŸããã¢ã©ãã¢èªãããã©ã€èªãªã©äžéšã®èšèªã¯å³ããå·Šã«æžããããããç¹å®ã®ã¹ã¿ã€ã«ãé©çšããå¿ èŠãããããšãèæ ®ããŠãã ãããæ¥æ¬èªããã®ä»ã®æ±ã¢ãžã¢èšèªã§ã¯ãæåãé©åã«ã¬ã³ããªã³ã°ããããã«ç°ãªãã¹ããŒã·ã³ã°ããã©ã³ããµã€ãºãå¿ èŠã«ãªãå ŽåããããŸãã
5. ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ããŠãŒã¶ãŒã®å¥œã¿ãããã€ã¹ã®èœåã«åºã¥ããŠã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãé©å¿ãããããšã§ãã¢ã¯ã»ã·ããªãã£ãåäžãããããšãã§ããŸããããšãã°ããŠãŒã¶ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã€ã³ã³ãã©ã¹ãã¢ãŒããæå¹ã«ããŠããå Žåãã³ã³ããŒãã³ãã®ã³ã³ãã©ã¹ããé«ãããããšãã§ããŸãã
/* CSS */
body {
--high-contrast: false;
}
@media (prefers-contrast: more) {
body {
--high-contrast: true;
}
}
@container style(--high-contrast: true) {
.component {
background-color: black;
color: white;
}
}
/* HTML */
<div class="component">...
ããã«ãããèœåã«é¢ä¿ãªãã誰ããããªãã®ãŠã§ããµã€ããå©çšãããããã¢ã¯ã»ã¹ã§ããããã«ãªããŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã§ãã€ã³ã³ãã©ã¹ãã¢ãŒããæ€åºããããã«@media (prefers-contrast: more)
ã¡ãã£ã¢ã¯ãšãªã䜿çšãããã®åŸ--high-contrast
ã«ã¹ã¿ã ããããã£ãèšå®ããŠããç¹ã«æ³šç®ããŠãã ãããããã«ããããŠãŒã¶ãŒã®ã·ã¹ãã èšå®ã«åºã¥ããŠã¹ã¿ã€ã«ã¯ãšãªã䜿çšããŠã¹ã¿ã€ã«ã®å€æŽãããªã¬ãŒã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹
- 説æçãªã«ã¹ã¿ã ããããã£åã䜿çšããïŒ ããããã£ã®ç®çãæç¢ºã«ç€ºãååãéžã³ãŸãïŒäŸïŒ
--theme
ã®ä»£ããã«--t
ïŒã - ã¹ã¿ã€ã«ã¯ãšãªãã·ã³ãã«ã«ä¿ã€ïŒ å¯èªæ§ãšããã©ãŒãã³ã¹ãç¶æããããã«ãã¹ã¿ã€ã«ã¯ãšãªå ã®è€éãªããžãã¯ãé¿ããŸãã
- å å®ãªåºç€ããå§ããïŒ åºæ¬çãªã¬ã€ã¢ãŠããšã¹ã¿ã€ãªã³ã°ã«ã¯ãåŸæ¥ã®CSSãšã¡ãã£ã¢ã¯ãšãªã䜿çšããŸããã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ãæ¢åã®CSSã眮ãæããã®ã§ã¯ãªãã匷åãããã®ã§ããã¹ãã§ãã
- ããã©ãŒãã³ã¹ãèæ ®ããïŒ ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯äžè¬çã«å¹ççã§ããã䜿çšããã¯ãšãªã®æ°ãšããããããªã¬ãŒããã¹ã¿ã€ã«ã®è€éãã«æ³šæããŠãã ããã䜿ãããããšãç¹ã«å€ãããã€ã¹ã§ã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- 培åºçã«ãã¹ãããïŒ æ§ã ãªã³ã³ããã¹ãããã©ãŠã¶ã§ã³ã³ããŒãã³ãããã¹ãããæ£ããé©å¿ããããšã確èªããŸãã
- ãã©ãŒã«ããã¯ã䜿çšããïŒ ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªããŸã å®å
šã«ã¯ãµããŒãããŠããªããã©ãŠã¶ã®ããã«ããã©ãŒã«ããã¯ã¹ã¿ã€ã«ãæäŸããŸãããã£ãŒãã£ãŒã¯ãšãªïŒ
@supports
ïŒã䜿çšããŠãã¹ã¿ã€ã«ã¯ãšãªã®ã³ãŒããæ¡ä»¶ä»ãã§é©çšã§ããŸãã - ã³ã³ããŒãã³ããææžåããïŒ åã³ã³ããŒãã³ãã®æå³ãããäœ¿çšæ¹æ³ãšããããäŸåããã«ã¹ã¿ã ããããã£ãæç¢ºã«ææžåããŸãã
- ã«ã¹ã±ãŒããèæ ®ããïŒ ã«ã¹ã±ãŒãã¯ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªå ã§ãé©çšãããããšãå¿ããªãã§ãã ãããã¹ã¿ã€ã«ãå®çŸ©ããéã«ã¯ã詳现床ãšç¶æ¿ãæèããŠãã ããã
- JavaScriptã¯æ§ããã«äœ¿çšããïŒ JavaScriptã䜿çšããŠã³ã³ããã®ã¹ã¿ã€ã«ãåçã«å€æŽããããšã¯ã§ããŸããããã®äœ¿çšã¯æå°éã«æããããã«ããŠãã ãããã¹ã¿ã€ã«ã®å€æŽã«ã¯ãã§ããã ãCSSã«äŸåããŸãã
ãã©ãŠã¶ã®ãµããŒã
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ãChromeãFirefoxãSafariãEdgeãªã©ã®ææ°ã®ãã©ãŠã¶ã§åªãããµããŒãç¶æ³ã«ãããŸããããããå€ããã©ãŠã¶ã§ã¯ãã®æ©èœãå®å šã«ã¯ãµããŒããããŠããªãå ŽåããããŸãããããã®ãã©ãŠã¶ã®ããã«ãã©ãŒã«ããã¯ã¹ã¿ã€ã«ãæäŸããããã«ãã£ãŒãã£ãŒã¯ãšãªã䜿çšããããããªãã£ã«ã䜿çšããããã«ããŠãã ããã
çµè«
CSSã³ã³ããã¹ã¿ã€ã«ã¯ãšãªã¯ãã¬ã¹ãã³ã·ããã¶ã€ã³ã«å¯Ÿãã匷åã§æè»ãªã¢ãããŒããæäŸããçã«ã³ã³ããŒãã³ãããŒã¹ã§é©å¿æ§ã®é«ããŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸããã³ã³ããèŠçŽ ã®ã¹ã¿ã€ãªã³ã°ã掻çšããããšã§ããã¶ã€ã³ã«ãããŠæ°ããã¬ãã«ã®å¶åŸ¡ãšè©³çŽ°åºŠãè§£ãæŸã¡ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããã¡ã³ããã³ã¹ãããããã¹ã±ãŒã©ãã«ã§ããŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšããããããŸãã
ã³ã³ããã¹ã¿ã€ã«ã¯ãšãªãåãå ¥ããŠãæ§ã ãªããŒããã¬ã€ã¢ãŠããèšèªãã¢ã¯ã»ã·ããªãã£èŠä»¶ã«ã·ãŒã ã¬ã¹ã«é©å¿ããã¬ã¹ãã³ã·ãã³ã³ããŒãã³ããæ§ç¯ããçã«ã°ããŒãã«ãªãŠã§ãäœéšãåµé ããŸãããã